package com.tracelog.core.annotation;

import com.tracelog.core.enums.LogLevel;
import com.tracelog.core.enums.IncludeType;

import java.lang.annotation.*;

/**
 * 追踪日志注解
 * <p>用于接口方法或类上，记录请求和响应信息</p>
 *
 * @author tracelog
 * @since 1.0.0
 */
@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TraceLog {

    /**
     * 日志描述（用于接口方法上）
     */
    String value() default "";

    /**
     * 所属模块（用于接口方法或类上）
     */
    String module() default "";

    /**
     * 日志级别
     */
    LogLevel level() default LogLevel.INFO;

    /**
     * 包含信息（在全局配置基础上扩展包含信息）
     */
    IncludeType[] includes() default {};

    /**
     * 排除信息（在全局配置基础上减少包含信息）
     */
    IncludeType[] excludes() default {};

    /**
     * 是否忽略日志记录（用于接口方法或类上）
     */
    boolean ignore() default false;
    
    /**
     * 是否记录响应内容
     */
    boolean recordResponse() default true;
    
    /**
     * 脱敏字段，支持多个字段，格式如: "password", "mobile"
     */
    String[] sensitiveFields() default {};
} 